Docker-compose限制CPU和内存

原因

使用docker的过程中, CPU和内存经常占满,导致其它服务都不能正常使用。

内存和CPU限制

yml文件添加 service.deploy内容如下:

1
2
3
4
5
6
7
deploy:
resources:
limits:
cpus: "2.00"
memory: 5G
reservations:
memory: 200M

注意:reservations中不支持cpus,仅支持内存。

以nginx为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3.7'
services:
nginxtest:
image: nginx:1.9.0
container_name: nginxtest
ports:
- "10080:80"
deploy:
resources:
limits:
cpus: "2.00"
memory: 5G
reservations:
memory: 200M
volumes:
- /data/kingmed-nginx/html:/usr/share/nginx/html
- /data/kingmed-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /data/kingmed-nginx/conf.d:/etc/nginx/conf.d
- /data/kingmed-nginx/logs:/var/log/nginx
restart: always

启动容器

限制指令为deploy.resources.limits这部分,注意节点位置,
上面这部分限制的含义是:nginx服务的CPU使用被限制在最多200%的CPU能力,内存使用被限制在最多5GB。
同时,这个服务至少需要200MB的内存。

启动的时候命令需要发生一些变化,否则不会生效:

原本的启动命令为

1
docker-compse up -d

需要添加一个参数–compatibility表示以兼容模式来运行

1
docker-compose --compatibility up -d

这里的关键在于添加–compatibility参数以兼容模式来运行,否则限制不会生效。

验证

通过上述方法限制容器CPU和内存后,可以使用命令:docker stats查看容器资源使用情况.

总结

docker-compose.yml限制内存需要添加deploy.resources.limits节点

docker-compose命令启动的时候需要添加–compatibility参数以兼容模式来运行,否则限制不会生效

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

继开 wechat
欢迎加我的微信,共同交流技术